package ar.com.agrobots.red;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class Nodo {

	private String name;
	private ArrayList<Conexion> conexiones;
	
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	public Nodo(String name){
		this.name = name;
		this.conexiones = new ArrayList<Conexion>();		
	}
	
	public ArrayList<Conexion> getConexiones(){
		return this.conexiones;
	}
	
	public void addConexion(Conexion conexion){
		this.conexiones.add(conexion);
	}

	public int getPesoConexion(Nodo nodo){
		for (Iterator<Conexion> iterator = this.conexiones.iterator(); iterator.hasNext();) {
			Conexion conexion = (Conexion) iterator.next();
			if (conexion.getNodoDestino().equals(nodo.getName())) return conexion.getPeso();
		}
		return -1;
	}
	
	public int getCantidadConexiones() {
		return this.conexiones.size();
	}
	
	public String toString(){
		String ret ="";
		
		ret+="Nodo "+this.name + "\n";
		
		Collection<Conexion> col = this.conexiones;
		if(col != null) {
			for(Iterator<Conexion> itCon = col.iterator(); itCon.hasNext();) {
				ret+=itCon.next().toString() + "\n";
			}
		}
		return ret;
	}
	
	public boolean equals(Object o){
		Nodo nodo = (Nodo) o;
		return (nodo.getName().equals(this.name));
	} 
	
	
	/***
	 * Evalua si el nodo se encuentra conectado al nodo n pasado por parametro
	 * @param n
	 * @return true si el nodo esta conectado al nodo n, o false en caso contrario
	 */
	public boolean isConectadoA(Nodo n) {
		boolean conectado = false;
		
		Iterator<Conexion> iterator = this.conexiones.iterator();
		while(iterator.hasNext() && !conectado){
			Conexion c = (Conexion) iterator.next();
			conectado = c.conectaNodo(n);
		}

		return conectado;
	}
}
